# 列表
# 有序性： 列表中的元素按照添加的顺序进行存储，每个元素都有一个对应的索引，可以通过索引访问和操作列表中的元素。
# 可变性： 列表是可变的，也就是说可以通过索引来修改、删除或插入元素。可以改变列表的长度、内容和顺序。
# 异构性： 列表中可以同时存储不同类型的数据，例如整数、字符串、浮点数、布尔值等。甚至可以存储其他列表或其他复杂的数据结构。
l1 = [1, 2, "Hello", True, ("a", "b", "c")]
l1[1] = 3  # 列表可修改

# len(value) 获取列表长度
print(f"len({l1}):{len(l1)}")

# count(value) 统计列表中 value 的个数
print(f"{l1}.count(1):{l1.count(1)}")

# index(value,start初始开始位置,stop结束位置) 查找列表中的 value ，并且返回第一次 value 出现的下标，如果不存在，则报错
print(f"{l1}.index(True):{l1.index(True)}")

# append(value) 在列表最后追加 value
l1.append(1)
print(f"l1:{l1}")

# extend(iterable) 将一个可迭代对象的元素依次添加到列表最后
l2 = ["a", "b", "c"]
l1.extend(l2)
print(f"l1:{l1}")

# insert(index, value) 向列表下标 index 插入 value，原有元素依次后移，如果指定下标 index 超过元素个数，则插入到列表最后
l1.insert(99, "d")
print(f"l1:{l1}")

# del list(value) 删除列表 list 中下标 value 为的元素，如果不存在，则报错
del l1[9]
print(f"l1:{l1}")

# remove(value) 在列表中删除为 value 的元素，如果不存在，则报错
l1.remove("b")
print(f"l1:{l1}")

# pop(index) 从列表中取出并删除下标为 index 的元素,如果不存在，则报错
l1_pop1 = l1.pop(4)
print(l1_pop1)
print(f"l1:{l1}")

# clear() 清空列表
print(f"l2:{l2}")
l2.clear()
print(f"l2:{l2}")

# sort(key, reverse) 对列表进行排序
# sort 方法默认对基本数据类型进行升序排序
# reverse 参数将列表元素排序后将列表逆序，实现降序排序
# key 参数用来指定排序规则，比如使用学生的年龄进行排序
l3 = ["a", "abc", "ab", "A"]
l3.sort()
print(l3)
l3 = ["a", "abc", "ab", "A"]
l3.sort(reverse=True)
print(l3)
